package com.yzd.learnjava;

import java.util.HashSet;

import com.yzd.learnjava.util.Print;

public class SetTest {
	public static void main(String[] args) {
//		XinYier xy1 = new XinYier("zhengdong", 31);
//		XinYier xy2 = new XinYier("zhengdong", 31);
//		Print.print(xy1 == xy2);
		
//		HashSet<XinYier> set1 = new HashSet<XinYier>();
//		HashSet<XinYier> set2 = new HashSet<XinYier>();
//		
//		set1.add(new XinYier("zhengdong", 31));
//		set1.add(new XinYier("zhengdong", 31));
//		set1.add(new XinYier("zhengdong2", 32));
//		set1.add(new XinYier("zhengdong4", 34));
//		
//		set2.add(new XinYier("zhengdong", 31));
//		set2.add(new XinYier("zhengdong2", 32));
//		set2.add(new XinYier("zhengdong3", 33));
//		
//		Print.print(set1);
//		Print.print(set2);
//		
//		//set1.retainAll(set2);
//		//Print.print(set1);
//		
//		set1.removeAll(set2);
//		Print.print(set1);
//		
//		set2.addAll(set1);
//		Print.print(set2);
		
		
		HashSet<XinYier> set3 = new HashSet<XinYier>();
		HashSet<XinYier> set4 = new HashSet<XinYier>();
		for(int i = 0; i < 10000; i++) {
			set3.add(new XinYier("zhengdong" + i, i));
		}
		
		for(int i = 5000; i < 15000; i++) {
			set4.add(new XinYier("zhengdong" + i, i));
		}
		//Print.print(set3);
		//Print.print(set4);

		long start = System.currentTimeMillis();
		set3.remove(set4);
		set4.addAll(set3);
		Print.print(System.currentTimeMillis() - start);
		//Print.print(set4);
		Print.print(set4.size());
		
	}
}

class XinYier{
	String name ;
	int age;
	
	XinYier(String name, int age){
		this.name = name;
		this.age = age;
	}
	
	@Override
	public int hashCode() {
		return name.hashCode() + age * 37 + 17;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof XinYier)) {
			return false ;
		}
		XinYier xy = (XinYier)obj;
		if(xy.name.equals(name) && xy.age == age) {
			return true;
		}
		return false;
	}
	
	public String toString() {
		return super.toString() + ", name:" + name + ", age:" + age + "\n";
	}
}
